#include "usrmodel.hpp"
#include "db.hpp" //数据库头文件

// user表的增加方法
bool UsrModel::insert(User &user)
{
    // 拼接sql语句
    char sql[1024] = {0};
    sprintf(sql, "insert into user(name,password,state) values('%s','%s','%s')", user.getname().c_str(), user.getpassword().c_str(), user.getstate().c_str());
    // printf("%s\n",sql);
    Mysql mysql;
    bool t = mysql.connect();
    // cout<<"bool:"<<(bool)t<<endl;
    if (t)
    {
        // 如果连接成功
        // 更新数据
        if (mysql.update(sql))
        {
            // 获取插入成功的用户数据生成的主键id
            user.setid(mysql_insert_id(mysql.getConnection()));
            return true;
        }
    }
    return false;
}

User UsrModel::query(int id)
{
    // 拼接sql语句
    char sql[1024] = {0};
    sprintf(sql, "select* from user where id=%d", id);
    Mysql mysql;
    // 连接数据库
    // 如果连接成功
    if (mysql.connect())
    {
        // 查询
        // 返回值是一个SQL资源,返回的是主键
        MYSQL_RES *res = mysql.query(sql);
        if (res != nullptr)
        {
            // 通过SQL资源将这一行的数据全部拿出来
            MYSQL_ROW row = mysql_fetch_row(res);
            if (row != nullptr)
            {
                User user;
                // MYSQL_ROW的类型是char**
                user.setid(atoi(row[0]));
                user.setname(row[1]);
                user.setpassword(row[2]);
                user.setstate(row[3]);
                // 释放资源
                mysql_free_result(res);
                return user;
            }
        }
    }
    // 失败就返回一个默认值
    return User();
}

// 更新用户的状态信息
bool UsrModel::UpdateState(User user)
{
    // 拼接sql语句
    char sql[1024] = {0};
    sprintf(sql, "update user set state='%s' where id=%d", user.getstate().c_str(), user.getid());
    Mysql mysql;
    // 连接数据库
    // 如果连接成功
    if (mysql.connect())
    {
        if (mysql.update(sql))
        {
            return true;
        }
    }

    return false;
}

void UsrModel::resetState()
{
    // 1.组装sql语句
    char sql[1024] = "update user set state = 'offline' where state = 'online'";

    Mysql mysql;
    if (mysql.connect())
    {
        mysql.update(sql);
    }
}
